home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 1994
/
MacHack 1994.toast
/
MacHack™94
/
Talks & Papers
/
Timothy Knox
/
yerk 3.66
/
Toolbox Classes
/
Drvr
< prev
next >
Wrap
Text File
|
1994-06-24
|
2KB
|
63 lines
\ drvr - parameter block for driver interface
\ 02/04/85 cbd Version 1
\ 1/31/87 rfl added kill:
\ 8/16/90 rfl close: must call kill: first
\ 5/28/92 rfl changed (fdos) to fcalls
Decimal
\ basic parameter block for drivers
:CLASS PBDrvr <Super Object
12 Bytes Name \ driver name
12 Bytes Header \ fields for internal use
Var IOComp \ i/o completion ptr
Int IOResult \ return code
Var IONamePtr \ name of drvr
Int vRef \ 22
Int IORefNum \ 24
Int csCode \ 26
Int csP1 \ 28
Int csP2 \ 30
Var IOBuffer
Var IOReq
Var IOAct
Int IOPosMode
Var IOOffset
\ ( -- addr )
:M FCB: addr: header ;M
\ ( addr len -- ) name the driver
:M NAME: ^base 50 erase addr: name >str255
put: ioNamePtr ;M
:M KILL: addr: header fcall killio,async 0 put: IOResult ;M
\ ( -- fCode )
:M OPEN: addr: header 0 (open) ;M
\ ( -- fCode fCode )
:M CLOSE: kill: self drop addr: header (close) ;M
\ ( addr len -- fCode ) read n bytes via the driver
:M READ: addr: header swap rot (read) ;M
\ ( addr len -- fCode ) write n bytes via the driver
:M WRITE: addr: header swap rot (write) ;M
\ ( cfa:proc addr len -- fCode ) no-wait read requires a completion PROC
:M READNW: put: IOReq +base put: IOBuffer >body +base put: IOComp
addr: header fcall PBRead,ASYNC ;M
\ ( cfa:proc addr len -- fCode ) no-wait write requires a completion PROC
:M WRITENW: put: IOReq +base put: IOBuffer >body +base put: IOComp
addr: header fcall PBWrite,ASYNC ;M
\ ( -- #bytes ) return actual count of bytes read
:M BYTESREAD: get: IOAct ;M
\ ( -- IOResult ) leave the current IOResult value
:M RESULT: get: IOResult ;M
;CLASS